unit u_Main_form;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ValEdit, Menus, ExtCtrls, u_Core, u_autorization_form, u_student_frame,
  u_Teacher_frame, types;

type

  { Tf_Main }

  Tf_Main = class(TForm)
    f_Student_frame1: Tf_Student_frame;
    f_Teacher_frame1: Tf_Teacher_frame;
    procedure FormCreate(Sender: TObject);
  private
    function f_Start_authentication():boolean;
    procedure p_Display_frame();
    { private declarations }
  public
    { public declarations }
  end;

var
  f_Main: Tf_Main;
  f_Authentication_form: Tf_Authentication_form;
implementation

{$R *.lfm}

{ Tf_Main }

         {private procedures}

procedure Tf_Main.FormCreate(Sender: TObject);
var
  b_Autorization_result:boolean;
begin
  b_Autorization_result:=f_Start_authentication();  //Пользователь должен пройти аутентификацию
  if b_Autorization_result then
    p_Display_frame()                //Если прошёл - отображаем интерфейс
  else
    Application.Terminate;           //Если не прошёл - завершаем работу
end;

function Tf_Main.f_Start_authentication():boolean; //Процедура аутентификации
var
  i_Authentication_result:TModalResult;
begin
  result:=FALSE;
  f_Authentication_form:=Tf_Authentication_form.Create(Self); //создаёт модальное окно аутентификации
  i_Authentication_result:=f_Authentication_form.ShowModal;
  if i_Authentication_result=mrYes then
    result:=TRUE;        //Если окно аутентификации закралось и вернуло mrYes, то аутентификация пройдена
end;

procedure Tf_Main.p_Display_frame();      //отображение интерфейса
var
  User_type:T_Access_type;
  core_error:T_Core_errors;
begin
  core_error:=User.f_Get_access_type(User_type);   //Узнаём, какой тип доступа у пользователя
  if core_error=NOERROR then                   //Если процедура получения типа доступа завершилась без ошибок,
    case User_type of                          //То смотрим, какой тип доступа получен
      STUDENT:                                //Если студент, то
        begin
          f_Main.f_Teacher_frame1.Visible:=FALSE;    //Скрываем фрейм с интерфейсом учителя
          f_Main.f_Teacher_frame1.Enabled:=FALSE;
          f_Main.f_Student_frame1.Visible:=TRUE;    //Отображаем и активируем фрейм с интерфейсом студента
          f_Main.f_Student_frame1.Enabled:=TRUE;
          f_Main.f_Student_frame1.p_Fill_tests_list();  //вызываем процедуру заполнения листбокса
        end;
      TEACHER:                               //Если преподаватель
        begin
          f_Main.f_Student_frame1.Visible:=FALSE;
          f_Main.f_Student_frame1.Enabled:=FALSE;     //Скрываем фрейм с интерфейсом студента
          f_Main.f_Teacher_frame1.Visible:=TRUE;
          f_Main.f_Teacher_frame1.Enabled:=TRUE;         //Отображаем и активируем фрейм с интерфейсом преподавателя
          f_Main.f_Teacher_frame1.p_Fill_tests_list();
          f_Main.f_Teacher_frame1.p_Fill_students_list();   //вызываем процедуру заполнения листбоксов
        end;
    else
      begin                                     //Если я накосячил в Tuser.f_Get_access_type
        ShowMessage('Получен некорректный тип доступа');
        Application.Terminate;
      end;
    end;
end;

         {public procedures}

end.

